跳到主要内容

pywinauto 包使用

pywinauto 是什么?

pywinauto 是一个自动化图形用户界面 (GUI) 的库,主要用于Windows应用程序。在 pywinauto 中,DesktopApplication 是两个核心类,它们各自有不同的用途和使用场景。

backend 选择

我们安装好 Pywinauto 之后,首先要确定哪种可访问性技术(backend)可以用于我们的应用程序,在 windows 上受支持的有两种:

  • Win32 API (backend= "win32") 默认的 backend 主要支持 MFC、VB6、VCL、简单的 WinForms 控件和大多数旧的遗留应用程序
  • MS UI Automation (backend="uia") 支持 WinForms、WPF、商店应用程序、QT5、浏览器

常用的一些元素定位工具:

  • SPY++:用于 WIN32 API,当 SPY++ 可以显示所有的控件时,访问技术应该选择 "win32"。
  • Inspect.exe:如果 Inspect.exe 的模式设置为 UIA 模式,可以比 SPY++ 显示更多的控件,则访问技术应该选择"uia"。
  • py_inspect:支持 win32 和 uia 两种访问技术,是SWAPY的替代。
  • UISPY:支持 uia 访问技术。
  • SWAPY:只支持win32访问技术。

Desktop 类

Desktop 类代表整个桌面,允许你访问和操作桌面上的所有窗口,包括非特定应用程序的窗口。Desktop 类非常适合于需要对多个应用程序或系统级窗口进行操作的场景。

使用 Desktop 类的常见场景包括:

  • 查找和操作桌面上的窗口,不限于特定应用程序。
  • 执行跨多个应用程序的自动化任务。
  • 获取当前活动窗口或桌面上的所有窗口列表。

示例:获取桌面上所有窗口的标题

from pywinauto import Desktop

desktop = Desktop(backend="uia")
windows = desktop.windows()

# 打印所有窗口的标题
for w in windows:
print(w.window_text())

Application 类

Application 类用于启动和控制一个特定的应用程序。你可以使用 Application 类来启动一个新的应用程序实例,或者连接到一个已经运行的应用程序。一旦连接到应用程序,你可以通过 Application 对象来操作应用程序窗口和控件,执行各种自动化任务。

使用 Application 类的常见场景包括:

  • 启动一个新的应用程序实例。
  • 连接到一个已经运行的应用程序。
  • 操作应用程序的窗口和控件,如按钮点击、文本输入、菜单选择等。

示例:启动和控制记事本应用程序

from pywinauto import Application

# 启动记事本应用程序
app = Application(backend="uia").start("notepad.exe")

# 通过窗口标题选择主窗口
main_window = app.window(title='无标题 - 记事本')

# 在记事本中输入文本
main_window.Edit.type_keys("Hello, pywinauto!", with_spaces=True)

Reference